package com.weizhizs.assistant.code;

import com.weizhizs.assistant.code.config.ParamConfig;
import com.weizhizs.assistant.code.dao.GeneratorDao;
import com.weizhizs.assistant.code.helper.TableHelper;
import com.weizhizs.assistant.code.vo.EnumVO;
import com.weizhizs.assistant.code.vo.TableVO;
import com.weizhizs.assistant.utils.StringUtils;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class PropGeneratorRunner extends GeneratorRunner {

    @Override
    public void generate() {
        Map<String, PropCodeGenerator> generators = PropGeneratorRegister.codeGenerators();

        Map<String, List<EnumVO>> enumList = GeneratorDao.getInstance().getEnumList();
        if (enumList.isEmpty()) {
            System.out.println("enumList is null.");
            return;
        }

        List<EnumVO> enumVOS = enumList.values().stream()
                .flatMap(Collection::stream)
                .collect(Collectors.toList());

        Map<String, String> tableList = GeneratorDao.getInstance().getTableList(
                ParamConfig.getInstance().getPreTableName(),
                ParamConfig.getInstance().getPreFilterName());

        if (tableList.isEmpty()) {
            System.out.println("tableList is null.");
            return;
        }

        List<TableVO> tableVOS = new ArrayList<>();

        for (String tableName : tableList.keySet()) {
            TableVO tableVO = new TableVO();
            tableVO.setTableName(tableName);
            tableVO.setClassName(TableHelper.tableNameToClassName(tableName));
            boolean havePk = GeneratorDao.getInstance().loadTableColumns(tableVO);
            if (!havePk) {
                System.out.println(tableName + " not key!!!!!!!!!!");
            }
            tableVO.getColumns().add(0,tableVO.getPk());
            tableVOS.add(tableVO);
        }

        for (PropCodeGenerator generator : generators.values()) {
            generator.run(enumVOS,tableVOS);
        }
    }

}
